﻿using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TS2015.Models;
using System.Data.Entity;
using System.IO;
using System.Data.Entity.Validation;
using System.Text;
using System.Net.Mail;

namespace TS2015.Controllers
{
    public class HomeController : Controller
    {
        TS2015Context db = new TS2015Context();
        // GET: Home    
        public ActionResult RequestTime()
        {
            return View();
        }
        public ActionResult Index()
        {
            var TinTucTrangChu = db.TbTinTucTrangChus.OrderBy(e => e.ThuTu).ToList();
            return View(TinTucTrangChu);
        }

        public ActionResult ProfileTinTuc()
        {
            var TinTucTrangChu = db.TbTinTucTrangChus.OrderBy(e => e.ThuTu).ToList();
            return View(TinTucTrangChu);
        }

        #region Profile
        public ActionResult Profile()
        {
            if (Session["TenDangNhap"] == null)
                return RedirectToAction("Login", "Home");

            string TenDangNhap = Session["TenDangNhap"].ToString();

            var thisinh = db.TbThiSinhs.Include(m => m.TbChuyenNganh).FirstOrDefault(m => m.MaTS == TenDangNhap);

            if (thisinh == null)
                return RedirectToAction("Login", "Home");

            if (!thisinh.TrangThaiDongTien)
                return View("PhieuXacNhan", thisinh);

            //ViewBag.BacDaoTao = from a in db.TbThiSinh_BacDaoTaos
            //                    join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
            //                    join c in db.TbHeDaoTaos on b.MaHeDaoTao equals c.MaHeDaoTao
            //                    where a.MaTS == thisinh.MaTS
            //                    select a;
            ViewBag.BacDaoTao = db.TbThiSinh_BacDaoTaos.Include(e => e.TbBacDaoTao).Include(e => e.TbBacDaoTao.TbHeDaoTao).Where(e => e.MaTS == thisinh.MaTS).ToList();
            return View("PhieuHoanThanh", thisinh);
        }
        #region Profile
        #region Edit Account

        public JsonResult GetAccount(string ID)
        {
            return Json(db.TbNguoiDungs.Where(m => m.TenDangNhap.Trim() == ID.Trim()).FirstOrDefault(), JsonRequestBehavior.AllowGet);
        }
        [HttpGet]
        public ActionResult EditAccount(string id)
        {
            TbNguoiDung Users = new TbNguoiDung();
            Users = db.TbNguoiDungs.FirstOrDefault(m => m.TenDangNhap == id);
            ViewBag.TenDN = id;
            return View(Users);
        }
        [HttpPost]
        public ActionResult EditAccount(TbNguoiDung Users)
        {
            var Username = Request.Form["Username"].Trim();
            var oldPass = DuLieuChung.MaHoaMD5(Request.Form["OldPass"].Trim());

            Users = db.TbNguoiDungs.Where(m => m.TenDangNhap == Username).FirstOrDefault();
            //Users.TenDangNhap = Username;
            if (db.TbNguoiDungs.Where(m => m.MatKhau.Trim() == oldPass).Count() == 0)
            {
                ModelState.AddModelError("Error", "Mật khẩu cũ không đúng!");
                return View(Users);
            }
            Users.MatKhau = DuLieuChung.MaHoaMD5(Request.Form["ReNewPass"].Trim());
            db.Entry(Users).State = EntityState.Modified;
            db.SaveChanges();

            return RedirectToAction("Profile", "Home");
        }
        #endregion
        #region Edit EditInformation
        public ActionResult EditInformation(string id)
        {
            ViewBag.HeTrungCap = false;
            ViewBag.HeCaoDang = false;
            TbThiSinh InfoCandidate = new TbThiSinh();
            InfoCandidate = db.TbThiSinhs.FirstOrDefault(m => m.MaTS == id);
            ViewBag.BacDaoTao = db.TbThiSinh_BacDaoTaos.Include(e => e.TbBacDaoTao).Include(e => e.TbBacDaoTao.TbHeDaoTao).Where(e => e.MaTS == id).ToList();
            ViewBag.TbTruongTHPT = db.TbThiSinh_Truongs.Include(e => e.TbTruongTHPT).Where(e => e.MaTS == id).ToList();

            ViewBag.DanToc = new SelectList(db.TbDanTocs.ToList(), "MaDanToc", "TenDanToc", InfoCandidate.MaDanToc);
            ViewBag.DoiTuongUuTien = new SelectList(db.TbDoiTuongUuTiens.ToList(), "MaDoiTuong", "TenDoiTuong", InfoCandidate.MaDoiTuong);
            //var matinh = (from c in db.TbThiSinhs
            //              join d in db.TbHuyens on c.MaHuyen equals d.MaHuyen
            //              join e in db.TbTinhs on d.MaTinh equals e.MaTinh
            //              where c.MaTS == id
            //              select d).FirstOrDefault();
            //ViewBag.Tinh = new SelectList(db.TbTinhs.ToList(), "MaTinh", "TenTinh", matinh.MaTinh);
            //ViewBag.Huyen = new SelectList(db.TbHuyens.Where(m => m.MaTinh == matinh.MaTinh).ToList(), "MaHuyen", "TenHuyen", InfoCandidate.MaHuyen);
            var IDNganh = (from c in db.TbThiSinhs
                           join d in db.TbChuyenNganhs on c.MaChuyenNganh equals d.MaChuyenNganh
                           where c.MaTS == id
                           select d).FirstOrDefault().IDNganh;
            var makhoithi = db.TbChuyenNganhs.Include(m => m.TbNganh).Where(m => m.IDNganh == IDNganh).FirstOrDefault().TbNganh.MaKhoiThi;
            ViewBag.KhoiThi = new SelectList(db.TbKhoiThis.ToList(), "MaKhoiThi", "TenKhoiThi", makhoithi);
            //ViewBag.HeDaoTao1 = new SelectList(db.TbHeDaoTaos.Where(m => m.TenHeDaoTao.ToLower() == "đại học chính quy" || m.TenHeDaoTao.ToLower() == "cao đẳng chính quy").ToList(), "MaHeDaoTao", "TenHeDaoTao", InfoCandidate.MaHeDaoTao);
            //ViewBag.HeDaoTao2 = new SelectList(db.TbHeDaoTaos.Where(m => m.TenHeDaoTao.ToLower() == "cao đẳng nghề" || m.TenHeDaoTao.ToLower() == "trung cấp chính quy").ToList(), "MaHeDaoTao", "TenHeDaoTao", InfoCandidate.MaHeDaoTao);
            var manganh = (from m in db.TbChuyenNganhs where (m.MaChuyenNganh == InfoCandidate.MaChuyenNganh) select m).First().IDNganh;
            ViewBag.Nganh = new SelectList(db.TbNganhs.Where(m => m.MaKhoiThi == makhoithi).ToList(), "IDNganh", "TenNganh", manganh);
            ViewBag.ChuyenNganh = new SelectList(db.TbChuyenNganhs.Where(m => m.IDNganh == manganh).ToList(), "MaChuyenNganh", "TenChuyenNganh", InfoCandidate.MaChuyenNganh);
            //var matinh2 = (from c in db.TbThiSinhs
            //               join d in db.TbTruongTHPTs on c.IDTruong equals d.IDTruong
            //               //join e in db.TbTinhs on d.MaTinh equals e.MaTinh
            //               where c.MaTS == id
            //               select d).FirstOrDefault().MaTinh;
            //var matinh2 = db.TbThiSinhs.Include(m => m.IDTruong).Where(m => m.MaTS == id).FirstOrDefault().TbHuyen.MaTinh;
            //ViewBag.TruongTHPT = new SelectList(db.TbTruongTHPTs.Where(m => m.MaTinh == matinh2).ToList(), "IDTruong", "TenTruong", InfoCandidate.IDTruong);
            ViewBag.TruongDH = new SelectList(db.TbTruongDHs.ToList(), "MaTruongDH", "TenTruongDH", InfoCandidate.MaTruongDH);
            //ViewBag.TinhTruong = new SelectList(db.TbTinhs.ToList(), "MaTinh", "TenTinh", matinh2);
            //ViewBag.KhuVuc = new SelectList(db.TbKhuVucs.ToList(), "MaKhuVuc", "TenKhuVuc", ThiSinh.MaKhuVuc);
            var mamon = (from c in db.TbThiSinhs
                         join d in db.TbDiemTotNghieps on c.MaTS equals d.MaTS
                         where c.MaTS == id
                         select d).FirstOrDefault();
            if (mamon != null)
            {
                ViewBag.MonTotNghiep = new SelectList(db.TbMonTotNghieps.ToList(), "MaMon", "TenMon", mamon.MaMon);
            }
            else
            {
                ViewBag.MonTotNghiep = new SelectList(db.TbMonTotNghieps.ToList(), "MaMon", "TenMon");
            }
            ViewBag.XepLoaiHS = new SelectList(db.TbXepLoaiHS.ToList(), "MaXepLoaiHS", "TenXepLoaiHS", InfoCandidate.MaXepLoaiHS);
            ViewBag.DanToc = new SelectList(db.TbDanTocs.ToList(), "MaDanToc", "TenDanToc", InfoCandidate.MaDanToc);
            ViewBag.DoiTuongUuTien = new SelectList(db.TbDoiTuongUuTiens.ToList(), "MaDoiTuong", "TenDoiTuong", InfoCandidate.MaDoiTuong);


            // Load Toán, Anh, Văn
            TbDiemTotNghiep Mark = new TbDiemTotNghiep();
            var ListMark = db.TbDiemTotNghieps.Where(m => m.MaTS == id);
            //var ListMark2 = db.TbDiemTotNghieps.Join();
            if (ListMark.Count() != 0)
            {
                foreach (var a in ListMark)
                {
                    var Subject = db.TbMonTotNghieps.FirstOrDefault(m => m.MaMon == a.MaMon).TenMon;
                    if (Subject.ToLower() == "toán")
                    {
                        ViewBag.Toan = a.Diem.ToString();
                    }
                    if (Subject.ToLower() == "tiếng anh")
                    {
                        ViewBag.Anh = a.Diem.ToString();
                    }
                    if (Subject.ToLower() == "ngữ văn")
                    {
                        ViewBag.Van = a.Diem.ToString();
                    }
                }
            }
            //var TS_HDT = db.TbThiSinh_HeDaoTaos.Where(m => m.MaTS == id).Select(m => m.MaHeDaoTao);
            //foreach (var a in TS_HDT)
            //{
            //    if (db.TbHeDaoTaos.First(m => m.MaHeDaoTao == a).TenHeDaoTao.ToLower() == "cao đẳng nghề")
            //    {
            //        ViewBag.HeCaoDang = true;
            //    }
            //    if (db.TbHeDaoTaos.First(m => m.MaHeDaoTao == a).TenHeDaoTao.ToLower() == "cao đẳng nghề")
            //    {
            //        ViewBag.HeTrungCap = true;
            //    }

            //}
            ViewBag.NgayHoanThanhDK = InfoCandidate.NgayHoanThanhDK.ToString();
            ViewBag.NgayDangKi = InfoCandidate.NgayDangKi.ToString();
            ViewBag.NgayDongTien = InfoCandidate.NgayDongTien.ToString();
            ViewBag.LanSuaCuoi = InfoCandidate.LanSuaCuoi.ToString();
            return View(InfoCandidate);
        }

        //public JsonResult CheckName(string CMND)
        //{
        //    var Check = db.TbThiSinhs.Where(m => m.CMND.ToLower().Trim() == CMND.ToLower().Trim());
        //    if (Check.Count() > 0)
        //    {
        //        return Json(true);
        //    }
        //    else
        //    {
        //        return Json(false);
        //    }
        //}
        [HttpPost]
        public ActionResult EditInformation(TbThiSinh item, bool HeTrungCap = false, bool HeCaoDang = false)
        {
            if (item.MaTS != null)
            {
                string fileName = "";
                var InfoCandidate = db.TbThiSinhs.AsNoTracking().First(n => n.MaTS == item.MaTS);
                var image = Request.Files["Anh"];
                if (image.ContentLength > 0)
                {
                    try
                    {
                        if (Request.Browser.Browser == "IE")
                        {
                            fileName = Path.GetFileName(image.FileName);
                        }
                        else
                        {
                            fileName = image.FileName;
                        }
                        fileName = (DateTime.Now.ToString("MMddyyyyHHmmssfff") + "_" + fileName);
                        string path = Path.Combine(Server.MapPath("~/Uploads/AnhThiSinh"), fileName);
                        item.Anh = fileName;
                        image.SaveAs(path);
                    }
                    catch (Exception ex)
                    {

                        ViewBag.Message = "Lỗi:" + ex.Message.ToString();
                    }
                }
                //Lấy ảnh đại diện cũ
                string Avatar = db.TbThiSinhs.AsNoTracking().First(e => e.MaTS == item.MaTS).Anh;

                // Kiem tra co ảnh upload lên server ko
                if (fileName != "" && Avatar != "")
                {
                    // Xóa ảnh cũ
                    string fullPath = Request.MapPath("~/Uploads/AnhThiSinh/" + Avatar);
                    if (System.IO.File.Exists(fullPath))
                        System.IO.File.Delete(fullPath);
                }
                else
                {
                    item.Anh = Avatar;
                }
                //string TSName = db.TbHeDaoTaos.AsNoTracking().First(m => m.MaHeDaoTao == InfoCandidate.MaHeDaoTao).TenHeDaoTao.ToLower();
                //if (TSName == "đại học chính quy" || TSName == "cao đẳng chính quy")
                //{
                // Điểm tốt nghiệp
                TbDiemTotNghiep diem;
                //toán văn anh
                string[] MangMaMon = Request.Form["Subject"].Split(',');
                string[] MangDiemMon = Request.Form["Mark"].Split(',');
                string ten = "";
                var listmark = db.TbDiemTotNghieps.Where(m => m.MaTS == item.MaTS);
                if (listmark != null)
                {
                    foreach (var a in listmark)
                    {

                        db.TbDiemTotNghieps.Remove(a);
                    }
                    db.SaveChanges();
                }
                for (int i = 0; i < MangMaMon.Length; i++)
                {
                    if (MangDiemMon[i].Trim() != "")
                    {
                        ten = MangMaMon[i];
                        var mamon = db.TbMonTotNghieps.Where(m => m.TenMon == ten).FirstOrDefault().MaMon;
                        diem = new TbDiemTotNghiep { MaTS = item.MaTS, MaMon = mamon, Diem = double.Parse(MangDiemMon[i].Trim()) };
                        db.TbDiemTotNghieps.Add(diem);
                    }
                }

                //môn còn lại
                if (Request.Form["Subject1"] != null && Request.Form["Mark1"] != null)
                {
                    string[] MangMaMon2 = Request.Form["Subject1"].Split(',');
                    string[] MangDiemMon2 = Request.Form["Mark1"].Split(',');
                    for (int i = 0; i < MangMaMon2.Length; i++)
                    {
                        if (MangDiemMon2[i].Trim() != "")
                        {
                            diem = new TbDiemTotNghiep { MaTS = item.MaTS, MaMon = Int32.Parse(MangMaMon2[i]), Diem = double.Parse(MangDiemMon2[i]) };
                            db.TbDiemTotNghieps.Add(diem);
                        }
                    }
                }

                // Thí sinh hệ đào tạo

                //var listTS = db.TbThiSinh_HeDaoTaos.Where(m => m.MaTS == item.MaTS);
                //if (listTS != null)
                //{
                //    foreach (var a in listTS)
                //    {

                //        db.TbThiSinh_HeDaoTaos.Remove(a);
                //    }
                //    db.SaveChanges();
                //}
                //if (HeCaoDang)
                //{
                //    var Ma1 = db.TbHeDaoTaos.Where(m => m.TenHeDaoTao.ToLower() == "Cao đẳng nghề".ToLower()).FirstOrDefault().MaHeDaoTao;
                //    db.TbThiSinh_HeDaoTaos.Add(new TbThiSinh_BacDaoTao { MaHeDaoTao = Ma1, MaTS = item.MaTS });
                //    db.SaveChanges();
                //}
                //if (HeTrungCap)
                //{
                //    var Ma2 = db.TbHeDaoTaos.Where(m => m.TenHeDaoTao.ToLower() == "Trung cấp chính quy".ToLower()).FirstOrDefault().MaHeDaoTao;
                //    db.TbThiSinh_HeDaoTaos.Add(new TbThiSinh_BacDaoTao { MaHeDaoTao = Ma2, MaTS = item.MaTS });
                //    db.SaveChanges();
                //}
                //}
                if (item.NgayDongTien != null)
                {
                    item.NgayDongTien = item.NgayDongTien;
                }
                if (item.NgayHoanThanhDK != null)
                {
                    item.NgayHoanThanhDK = item.NgayHoanThanhDK;
                }
                //item.MaHeDaoTao = InfoCandidate.MaHeDaoTao;
                //item.MaChuyenNganh = InfoCandidate.MaChuyenNganh;
                item.HinhThucDK = db.TbThiSinhs.AsNoTracking().First(m => m.MaTS == item.MaTS).HinhThucDK;
                item.TrangThaiDongTien = db.TbThiSinhs.AsNoTracking().First(m => m.MaTS == item.MaTS).TrangThaiDongTien;
                item.TrangThaiHoanThanh = db.TbThiSinhs.AsNoTracking().First(m => m.MaTS == item.MaTS).TrangThaiHoanThanh;
                item.NgayDangKi = db.TbThiSinhs.AsNoTracking().First(m => m.MaTS == item.MaTS).NgayDangKi;
                //item.NgayHoanThanhDK = DateTime.Now;
                item.LanSuaCuoi = DateTime.Now;
                db.TbThiSinhs.AsNoTracking();

                db.Entry(item).State = EntityState.Modified;
                SaveChanges(db);
            }

            return RedirectToAction("Profile", "Home");
        }
        private void SaveChanges(DbContext context)
        {
            try
            {
                context.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                StringBuilder sb = new StringBuilder();

                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }

                throw new DbEntityValidationException(
                    "Entity Validation Failed - errors follow:\n" +
                    sb.ToString(), ex
                ); // Add the original exception as the innerException
            }
        }
        #endregion
        #endregion
        //public ActionResult UploadImage()
        //{
        //    TbThiSinh item = new TbThiSinh();
        //    if (!Request.IsAjaxRequest())
        //        return View(item);

        //    return PartialView(item);
        //}

        // [HttpPost]
        //public ActionResult UploadImage(TbThiSinh item)
        //{
        //    string fileName = "";
        //    var image = Request.Files["AnhDaiDien"];
        //    if (image != null)
        //    {
        //        try
        //        {
        //            if (Request.Browser.Browser == "IE")
        //            {
        //                fileName = Path.GetFileName(image.FileName);
        //            }
        //            else
        //            {
        //                fileName = image.FileName;
        //            }
        //            fileName = (DateTime.Now.ToString("MMddyyyyHHmmssfff") + "_" + fileName);
        //            string path = Path.Combine(Server.MapPath("~/Uploads/AnhThiSinh"), fileName);
        //            item.Anh = fileName;
        //            image.SaveAs(path);
        //        }
        //        catch (Exception ex)
        //        {

        //            ViewBag.Message = "Lỗi:" + ex.Message.ToString();
        //        }
        //        if (item.MaTS != null)
        //        {
        //            //Lấy ảnh đại diện cũ
        //            string Avatar = db.TbThiSinhs.AsNoTracking().First(e => e.MaTS == item.MaTS).Anh;

        //            // Kiem tra co ảnh upload lên server ko
        //            if (fileName != "" && Avatar != "")
        //            {
        //                // Xóa ảnh cũ
        //                string fullPath = Request.MapPath("~/Uploads/AnhThiSinh/" + Avatar);
        //                if (System.IO.File.Exists(fullPath))
        //                    System.IO.File.Delete(fullPath);
        //            }
        //            else
        //                item.Anh = Avatar;

        //            db.Entry(item).State = EntityState.Modified;
        //        }
        //        // Thêm mới tin tức
        //        else
        //            db.Entry(item).State = EntityState.Modified;
        //        // Lưu vào CSDL
        //        db.SaveChanges();

        //    }
        //    return RedirectToAction("Profile");
        //}
        #endregion
        public ActionResult Login()
        {
            HttpCookie ckMatKhau = Request.Cookies["MatKhau"];
            HttpCookie ckTenDangNhap = Request.Cookies["TenDangNhap"];
            if (ckTenDangNhap != null)
            {
                if (CheckLogin(ckTenDangNhap.Value, ckMatKhau.Value, true))
                    return RedirectToAction("Profile", "Home");
            }
            return View();
        }

        bool CheckLogin(string TenDangNhap, string MatKhau, bool remember = false)
        {
            if (TenDangNhap != null && MatKhau != null)
            {
                string MatKhauMd5 = DuLieuChung.MaHoaMD5(MatKhau);

                var users = (from p in db.TbNguoiDungs
                             where p.TenDangNhap == TenDangNhap && p.MatKhau == MatKhauMd5
                             select p
                            );

                if (users.Count() == 0)
                {
                    ModelState.AddModelError("Error", "Tên đăng nhập hoặc mật khẩu không đúng.");
                    return false;
                }

                if (users.First().KhoaTaiKhoan == KhoaTaiKhoan.Khoa)
                {
                    ModelState.AddModelError("Error", "Tài khoản của bạn bị khóa.");
                    return false;
                }
                var name = from a in users
                           join b in db.TbQuyens on a.MaQuyen equals b.MaQuyen
                           select b.Quyen;
                if (name.First().ToLower().Trim() != "thí sinh")
                    return false;

                if (remember)
                {
                    // check if cookie exists and if yes update
                    HttpCookie ckTenDangNhap = Request.Cookies["TenDangNhap"];

                    if (ckTenDangNhap != null)
                    {
                        //force to expire it
                        ckTenDangNhap.Values.Add("TenDangNhap", users.First().TenDangNhap);
                        ckTenDangNhap.Values.Add("MatKhau", MatKhau);
                        ckTenDangNhap.Expires = DateTime.Now.AddHours(-20);
                    }
                    HttpCookie ckMatKhau = null;

                    //create a cookie
                    ckTenDangNhap = new HttpCookie("TenDangNhap");
                    ckMatKhau = new HttpCookie("MatKhau");

                    ckTenDangNhap.Value = TenDangNhap;
                    ckMatKhau.Value = MatKhau;

                    ckTenDangNhap.Expires = DateTime.Today.AddDays(15);
                    ckMatKhau.Expires = DateTime.Today.AddDays(15);

                    Response.Cookies.Add(ckTenDangNhap);
                    Response.Cookies.Add(ckMatKhau);
                }

                Session["TenDangNhap"] = users.First().TenDangNhap;

                return true;
            }
            return false;
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(string TenDangNhap, string MatKhau, bool remember = false)
        {
            if (ModelState.IsValid && TenDangNhap != null && MatKhau != null)
            {
                if (CheckLogin(TenDangNhap, MatKhau, remember))
                {
                    if (MatKhau == "123456") Session["MatKhauMacDinh"] = true;

                    return RedirectToAction("Profile", "Home"); 
                }
            }
            return View();
        }

        [ChildActionOnly]

        public ActionResult LeftProfile()
        {
            string TenDangNhap = Session["TenDangNhap"].ToString();
            var thisinh = db.TbThiSinhs.Include(m => m.TbChuyenNganh).FirstOrDefault(m => m.MaTS == TenDangNhap);

            if (thisinh == null)
                return RedirectToAction("Login", "Home");

            return PartialView(thisinh);
        }
        [ChildActionOnly]

        public ActionResult PhieuHoanThanh()
        {
            string TenDangNhap = Session["TenDangNhap"].ToString();
            var thisinh = db.TbThiSinhs.Include(m => m.TbChuyenNganh).FirstOrDefault(m => m.MaTS == TenDangNhap);

            if (thisinh == null)
                return RedirectToAction("Login", "Home");

            return View(thisinh);
        }
        public ActionResult Logout()
        {
            Session["TenDangNhap"] = null;

            HttpCookie ckMatKhau = Request.Cookies["MatKhau"];
            HttpCookie ckTenDangNhap = Request.Cookies["TenDangNhap"];

            if (ckMatKhau != null)
            {
                ckMatKhau.Expires = DateTime.Now.AddDays(-1);
                Response.Cookies.Add(ckMatKhau);
            }

            if (ckTenDangNhap != null)
            {
                ckTenDangNhap.Expires = DateTime.Now.AddDays(-1);
                Response.Cookies.Add(ckTenDangNhap);
            }
            Session.Clear();
            Session.Abandon();
            Session.RemoveAll();

            return RedirectToAction("Index", "Home");
        }

        public ActionResult ForgotPassword()
        {
            return View();
        }

        [HttpPost]
        public ActionResult ForgotPassword(string TenDangNhap)
        {
            var item = db.TbNguoiDungs.Include(e => e.TbQuyen).FirstOrDefault(e => e.TenDangNhap == TenDangNhap);
            if (item == null)
            {

                ModelState.AddModelError("Error", "Tên đăng nhập không tồn tại.");
                return View();
            }
            else
                if (IsValidEmail(item.Email))
                {
                    string new_pass = CreateRandomPassword(8);

                    if (SendMail(item.Email, "<p style='line-height: 25px;font-size: 14px;'>Có một yêu cầu thay đổi mật khẩu. <br/> Mật khẩu đăng nhập mới vào hệ thống của bạn là: <b>" + new_pass + "</b></p>"))
                    {
                        item.MatKhau = DuLieuChung.MaHoaMD5(new_pass);

                        db.TbNguoiDungs.Attach(item);
                        db.Entry(item).Property(x => x.MatKhau).IsModified = true;
                        db.SaveChanges();
                        string reEmail = item.Email;
                        reEmail = reEmail.Substring(0, reEmail.IndexOf('@') - 2) + "**@**" + reEmail.Substring(reEmail.LastIndexOf('.') + 1);

                        ModelState.AddModelError("Error", "Mật khẩu mới đã được gửi tới địa chỉ email: " + reEmail);
                        ViewBag.IsSend = true;
                        TempData["IsAdmin"] = item.TbQuyen.Quyen.ToLower() == "thí sinh" ? false : true;
                    }
                }
                else
                    ModelState.AddModelError("Error", "Địa chỉ Email: " + item.Email + " đã đăng ký không hợp lệ.");

            return View();
        }

        bool IsValidEmail(string email)
        {
            try
            {
                var addr = new System.Net.Mail.MailAddress(email);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool SendMail(string Email, string Content)
        {
            bool state = false;

            if (ModelState.IsValid)
            {
                var mailServer = db.TbMailServers.FirstOrDefault();
                if (mailServer == null) return false;

                MailMessage mail = new MailMessage();
                mail.To.Add(Email);
                mail.From = new MailAddress(mailServer.SenderMail);
                mail.Subject = "Đặt lại mật khẩu đăng nhập Hệ thống Tuyển sinh Online EPU";
                string Body = Content;
                mail.Body = Body;
                mail.Priority = MailPriority.High;
                mail.IsBodyHtml = true;

                SmtpClient smtp = new SmtpClient();
                smtp.Host = mailServer.Host;
                smtp.Port = int.Parse(mailServer.Port);
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new System.Net.NetworkCredential(mailServer.UserName, mailServer.Password);
                smtp.EnableSsl = true;

                smtp.Send(mail);

                state = true;
            }
            return state;
        }

        private string CreateRandomPassword(int passwordLength)
        {
            string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
            char[] chars = new char[passwordLength];
            Random rd = new Random();

            for (int i = 0; i < passwordLength; i++)
            {
                chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
            }

            return new string(chars);
        }

        //[ChildActionOnly]
        public ActionResult TrangThaiHoSo()
        {
            if (Session["TenDangNhap"] == null)
                return RedirectToAction("Login", "Home");

            string TenDangNhap = Session["TenDangNhap"].ToString();
            var thisinh = db.TbThiSinhs.Include(m => m.TbChuyenNganh).FirstOrDefault(m => m.MaTS == TenDangNhap);

            if (thisinh == null)
                return RedirectToAction("Login", "Home");

            if (!thisinh.TrangThaiDongTien)
                return View("PhieuXacNhan", thisinh);
            //ViewBag.BacDaoTao = from a in db.TbThiSinh_BacDaoTaos
            //                    join b in db.TbBacDaoTaos on a.MaBacDT equals b.MaBacDT
            //                    join c in db.TbHeDaoTaos on b.MaHeDaoTao equals c.MaHeDaoTao
            //                    where a.MaTS == thisinh.MaTS
            //                    select a;
            ViewBag.BacDaoTao = db.TbThiSinh_BacDaoTaos.Include(e => e.TbBacDaoTao).Include(e => e.TbBacDaoTao.TbHeDaoTao).Where(e => e.MaTS == thisinh.MaTS).ToList();
            return View("PhieuHoanThanh", thisinh);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
